package org.springframework.security.authentication;

import org.springframework.security.core.Authentication;

/**
 * @author Dillon
 * @date 2024/7/14
 * @slogan 致敬大师 致敬未来的你
 * @desc 认证 信任 解析器接口
 */
public interface AuthenticationTrustResolver {

	/**
	 * 判断当前认证对象是否未匿名认证对象
	 *
	 * @param authentication 认证对象
	 * @return 是否为匿名认证
	 */
	boolean isAnonymous(Authentication authentication);

	/**
	 * 判断当前认证是否为记住我认证
	 *
	 * @param authentication 认证对象
	 * @return 是否为记住我认证
	 */
	boolean isRememberMe(Authentication authentication);

	/**
	 * 判断当前认证已认证成功 且不是匿名 不是记住我认证 （常规成功认证）
	 *
	 * @param authentication 认证对象
	 * @return 认证结果
	 */
	default boolean isFullyAuthenticated(Authentication authentication) {
		return isAuthenticated(authentication) && !isRememberMe(authentication);
	}

	/**
	 * 默认方法 判断当前请求不是默认请求 且认证成功
	 *
	 * @param authentication 认证对象
	 * @return 是否为常规认证
	 */
	default boolean isAuthenticated(Authentication authentication) {
		return authentication != null && authentication.isAuthenticated() && !isAnonymous(authentication);
	}

}
